home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1997 February
/
EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso
/
enigma
/
earcd
/
comm
/
comm5
/
nwsbrkr5.lha
/
Reader
/
NewsBreaker
/
src
/
gui
/
Help.c
< prev
next >
Wrap
Text File
|
1996-12-15
|
8KB
|
303 lines
/*
* Help.c -- Online Hilfen
*/
/*
* OpenAmigaGuide -- öffnet Fenster mit Guide-Hilfe
* OpenDatatypeWindow -- öffnet Fenster mit Datatype
* void OpenAbout -- öffnet Aboutfenster
*/
#define UMS_ROOT_PATH "UMS:"
#define NB_APP_TYPE "Reader"
#define NB_LANGUAGE "deutsch"
#define NB_GUIDE_PATH UMS_ROOT_PATH "Doc/" NB_LANGUAGE "/"
#define NB_GUIDE_SUFFIX ".guide" /* Standardtyp der Dokumentation */
#define NB_GUIDEFILE NB_GUIDE_PATH NB_NAME NB_GUIDE_SUFFIX
#define NB_GUIDEFILE_FALLBACK "PROGDIR:" NB_NAME NB_GUIDE_SUFFIX
#define NB_GUIDEFILE_FALLBACK2 "PROGDIR:/Doc/" NB_LANGUAGE "/" NB_NAME NB_GUIDE_SUFFIX
/*
* OpenAmigaGuide (struct Window *hostwin) -- öffnet Fenster mit Guide-Datatype
*
* INPUTS
* hostwin -- ein Fenster des Hauptprogramms
*
* RESULT
* void (todo -- success melden)
*
* Quelle: Die Routine kommt vom GUICreator-Programm
*/
/*
OpenAmigaGuide() gibt dem Anwender eine AmigaGUIDE-Onlinehilfe
Beschreibung:
- öffne Fenster mit Scrollbars,
- erzeuge AmigaGuide-Datatype
- lade das .guide File in den Datatype und
- binde diese BOOPSI Gadgets (Datatype ist BOOPSI Gadget) untereinander , todo
- binde Gadgets an das Fenster, OK
*/
void
OpenAmigaGuide (struct Window *hostwin)
{
/* Feld möglicher Pade+Filenamen */
static STRPTR names[] =
{
NB_GUIDEFILE,
NB_GUIDEFILE_FALLBACK,
NB_GUIDEFILE_FALLBACK2,
NULL};
OpenDatatypeWindow (hostwin, names);
}
/*
* OpenAbout -- Aboutfenster
*/
void
OpenAbout (struct Window *hostwin)
{
static STRPTR names[] =
{
"dh0:nb/Reader/NewsBreaker/experimental/Pic/nb.ilbm",
NULL};
OpenDatatypeWindow (hostwin, names);
}
void
OpenDatatypeWindow (struct Window *hostwin, STRPTR filenames[])
{
struct IntuiMessage *imessage = NULL;
struct Gadget *idcmpgad = NULL;
struct TagItem *tag = NULL;
struct TagItem *tstate = NULL;
ULONG idcmpclass = 0;
UWORD messagecode = 0;
BOOL running = TRUE;
struct Screen *customscreen = hostwin->WScreen;
struct Gadget *prop_abObject, *up_abObject, *down_abObject;
struct Image *up_abImage, *down_abImage;
ULONG *connect_abObject;
struct Window *win = NULL;
/* Prop-Gadget */
static struct TagItem prop2aguide[] =
{
{PGA_Top, DTA_TopVert},
{TAG_DONE}
};
/* Amigaguide-Gadget: funkt nicht :-( */
static struct TagItem aguide2prop[] =
{
{DTA_TopVert, PGA_Top},
{DTA_VisibleVert, PGA_Visible},
{DTA_TotalVert, PGA_Total},
{TAG_DONE}
};
APTR visualinfo = GetVisualInfo (hostwin->WScreen, TAG_DONE);
if (visualinfo)
{
ULONG i = 0;
Object *o = NULL;
while ((o == NULL) && (filenames[i] != NULL))
{
o = NewDTObject (filenames[i++],
DTA_SourceType, DTST_FILE,
DTA_ControlPanel, TRUE,
TAG_DONE);
}
if (o)
{
win = OpenWindowTags (NULL, WA_Activate, TRUE,
WA_Flags, WFLG_DEPTHGADGET |
WFLG_DRAGBAR |
WFLG_CLOSEGADGET |
WFLG_SIZEGADGET |
WFLG_SIZEBBOTTOM |
WFLG_SIZEBRIGHT,
//WA_InnerHeight, height,
//WA_InnerWidth, width,
WA_MinHeight, 50,
WA_MinWidth, 50,
WA_MaxHeight, customscreen->Height,
WA_MaxWidth, customscreen->Width,
WA_IDCMP, IDCMP_CLOSEWINDOW |
IDCMPUPDATE |
IDCMP_VANILLAKEY |
IDCMP_GADGETDOWN,
//WA_Left, left,
//WA_Top, top,
WA_SmartRefresh, TRUE,
WA_CustomScreen, customscreen,
TAG_DONE);
if (win)
{
/* todo: BOOPSI Gadgets für Scrollbar. */
/* todo: Zur Zeit keine Bindung des Scrollbars an den Datatype */
/* todo: Notifiction. Also: Klick auf Scrollbar --> Datatype scrollt */
/* todo: Klick auf Guide-Link, neuer Text: --> Scrollbar(-Top) ändert sich usw. */
prop_abObject = NewObject (NULL, "propgclass",
GA_ID, 2,
GA_Top, win->BorderTop + 2,
GA_RelRight, -(win->BorderRight - 5),
GA_Width, win->BorderRight - 8,
GA_RelHeight, -(win->BorderTop + (3 * win->BorderBottom)) - 6,
GA_RightBorder, TRUE,
ICA_MAP, prop2aguide,
ICA_TARGET, NULL,
PGA_NewLook, TRUE,
PGA_Borderless, TRUE,
PGA_Visible, 50,
PGA_Total, 50,
TAG_DONE);
up_abImage = NewObject (NULL, "sysiclass",
SYSIA_DrawInfo, dri,
SYSIA_Which, UPIMAGE,
IA_Width, win->BorderRight,
IA_Height, win->BorderBottom,
TAG_DONE);
down_abImage = NewObject (NULL, "sysiclass",
SYSIA_DrawInfo, dri,
SYSIA_Which, DOWNIMAGE,
IA_Width, win->BorderRight,
IA_Height, win->BorderBottom,
TAG_DONE);
up_abObject = NewObject (NULL, "buttongclass",
GA_RelBottom, -(3 * win->BorderBottom) - 1,
GA_RelRight, -(win->BorderRight - 1),
GA_Height, win->BorderBottom,
GA_Width, win->BorderRight,
GA_Image, up_abImage,
GA_RightBorder, TRUE,
GA_Previous, prop_abObject,
TAG_DONE);
down_abObject = NewObject (NULL, "buttongclass",
GA_RelBottom, -(2 * win->BorderBottom),
GA_RelRight, -(win->BorderRight - 1),
GA_Height, win->BorderBottom,
GA_Width, win->BorderRight,
GA_Image, down_abImage,
GA_RightBorder, TRUE,
GA_Previous, up_abObject,
TAG_DONE);
connect_abObject = NewObject (NULL, ICCLASS,
ICA_MAP, aguide2prop,
ICA_TARGET, prop_abObject,
TAG_DONE);
if (prop_abObject && up_abImage &&
down_abImage && up_abObject && down_abObject)
{
SetDTAttrs (o, NULL, NULL,
GA_Left, win->BorderLeft + 2,
GA_Top, win->BorderTop + 2,
GA_RelWidth, - (win->BorderLeft+win->BorderRight),
GA_RelHeight,- (win->BorderTop+win->BorderBottom),
ICA_TARGET, ICTARGET_IDCMP,
TAG_DONE);
AddDTObject (win, NULL, o, -1L);
/* BOOPSI -- Datatype Bindung läuft nicht */
SetGadgetAttrsX (prop_abObject, win, NULL, ICA_TARGET, o, TAG_DONE);
//SetGadgetAttrsX (up_abObject, win, NULL, ICA_TARGET, o, TAG_DONE);
//SetGadgetAttrsX (down_abObject, win, NULL, ICA_TARGET, o, TAG_DONE);
AddGList (win, prop_abObject, -1, -1, NULL);
RefreshGList (prop_abObject, win, NULL, -1);
}
while (running)
{
Wait (1L << win->UserPort->mp_SigBit);
while (imessage = (struct IntuiMessage *) GetMsg ((struct MsgPort *) win->UserPort))
{
idcmpgad = (struct Gadget *) imessage->IAddress;
idcmpclass = imessage->Class;
messagecode = imessage->Code;
ReplyMsg ((struct Message *) imessage);
switch (idcmpclass)
{
/* Ereignistabelle wäre besser als switch/case, todo */
case IDCMP_VANILLAKEY:
if (messagecode == 27 || messagecode == 'o' || messagecode == 'O')
running = FALSE;
break;
case IDCMP_REFRESHWINDOW:
BeginRefresh (win);
EndRefresh (win, TRUE);
break;
case IDCMP_CLOSEWINDOW:
running = FALSE;
break;
case IDCMP_IDCMPUPDATE:
tstate = (struct TagItem *) imessage->IAddress;
while (tag = NextTagItem (&tstate))
{
if (tag->ti_Tag == DTA_Sync)
{
RefreshDTObjectA (o, win, NULL, NULL);
}
}
break;
} /* switch */
} /* while */
} /* while */
DisposeObject (down_abObject);
DisposeObject (up_abObject);
DisposeObject (down_abImage);
DisposeObject (up_abImage);
DisposeObject (prop_abObject);
CloseWindow (win);
}
else
{
ShowError ("AmigaGUIDE Fenster\n"
"konnte nicht geöffnet werden.");
}
DisposeDTObject (o);
}
else
{
ShowError ("Datatype-Fenster\nnicht geöffnet. Ursachen:"
" · Dokument nicht gefunden oder\n"
" · Zu wenig Speicher oder\n"
" · Benötigter Datatype nicht vorhanden.");
}
FreeVisualInfo (visualinfo);
}
}